package com.atguigu.singleton.type1;

/**
 * @program: design-patterns
 * @author: yangshen
 * @description: type1 - 饿汉式1（静态常量）
 * 优缺点说明：
 *
 * 1) 优点：这种写法比较简单，就是在类装载的时候就完成实例化。避免了线程同步问题。
 *
 * 2) 缺点：在类装载的时候就完成实例化，没有达到Lazy Loading的效果。如果从始 至终从未使用过这个实例，则会造成内存的浪费
 *
 * 3) 这种方式基于classloder机制避免了多线程的同步问题，不过，instance在类装载时就实例化，在单例模式中大多数都是调用getInstance方法， 但是导致类装载的原因有很多种，
 *  因此不能确定有其他的方式（或者其他的静态方法）导致类 装载，这时候初始化instance就没有达到lazy loading的效果
 *
 * 4) 结论：这种单例模式可用，可能造成内存浪费
 * @create: 2022-01-16 11:28
 **/
public class SingleTon {

    public static void main(String[] args) {
        //测试
        SingleTon instance1 = SingleTon.getInstance();
        SingleTon instance2 = SingleTon.getInstance();
        //true
        System.out.println(instance1 == instance2);
        System.out.println("instance1.hashCode() = "+ instance1.hashCode());
        System.out.println("instance2.hashCode() = "+ instance2.hashCode());
    }

    /**
     * 1.构造器私有化，外部不能new
     */
    private SingleTon() {
    }

    /**
     * 2.本类内容创建对象实例
     */
    private static final SingleTon SINGLE_TON = new SingleTon();

    /**
     * 3.提供一个公有的静态方法，返回实例对象
     * @return 该对象实例
     */
    public static SingleTon getInstance(){
        return SINGLE_TON;
    }
}
